From 08159178ca75f2b6fb226988e1905849d7906f3a Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Sat, 27 Mar 1993 01:58:44 +0000 Subject: [PATCH] (add-hook) Added optional arg to cause hook to be appended rather than prepended to the hook list. This obviates the 23 different hook-bashing packages in LCD. (get-word) Added. Lots of help and default-generator functions in LCD use it, and it's remarkably difficult to get right, especially given the new syntax primitives. --- lisp/subr.el | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index 464fea25f9c..e6ec3b3b613 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -407,11 +407,12 @@ If it is a list, the elements are called, in order, with no arguments." "Variable by which C primitives find the function `run-hooks'. Don't change it.") -(defun add-hook (hook function) - "Add to the value of HOOK the function FUNCTION unless already present. -HOOK should be a symbol, and FUNCTION may be any valid function. -HOOK's value should be a list of functions, not a single function. -If HOOK is void, it is first set to nil." +(defun add-hook (hook function &optional append) + "Add to the value of HOOK the function FUNCTION unless already present (it +becomes the first hook on the list unless optional APPEND is non-nil, in +which case it becomes the last). HOOK should be a symbol, and FUNCTION may be +any valid function. HOOK's value should be a list of functions, not a single +function. If HOOK is void, it is first set to nil." (or (boundp hook) (set hook nil)) (or (if (consp function) ;; Clever way to tell whether a given lambda-expression @@ -419,7 +420,10 @@ If HOOK is void, it is first set to nil." (let ((tail (assoc (cdr function) (symbol-value hook)))) (equal function tail)) (memq function (symbol-value hook))) - (set hook (cons function (symbol-value hook))))) + (set hook + (if append + (nconc (symbol-value hook) (list function)) + (cons function (symbol-value hook)))))) (defun momentary-string-display (string pos &optional exit-char message) "Momentarily display STRING in the buffer at POS. -- 2.30.2